Terraformを使って常に最新のタスク定義でECS Scheduled Taskを実行する
こんにちは。AWS事業本部トクヤマシュンです。
ECS Scheduled TaskをTerraformで構築する機会がありました。
その際、常に最新のタスク定義を指定するよう設定するのに少しハマったので、本エントリによって情報発信します。
はじめに結論
ecs_targetのtask_definition_arnにリビジョン番号無しのタスク定義のarnを指定しましょう。
どこがハマりどころなのか?
コンソール画面からECS Scheduled Taskを設定する際は、EventBridgeの設定画面で常に最新版を実行するかどうか選択できます。
しかし、Terraformでは本設定を選択できるような項目はありません。
どのようにすれば、常に最新版を実行することができるのか分からず、少しハマりました。
解決策
答えは、タスク定義のARNを指定する際、リビジョン番号無しにするでした。
下にEventBridgeのルールとECS Scheduled Taskのターゲットを作成するTerraformテンプレートの例を示します。
resource "aws_cloudwatch_event_rule" "test_ecs_scheduled_task_event_rule" { name = "test-ecs-scheduled-task-event-rule" schedule_expression = "cron(0-59/5 * * * ? *)" is_enabled = true } resource "aws_cloudwatch_event_target" "test_ecs_scheduled_task_target" { target_id = "test-ecs-scheduled-task-target" rule = aws_cloudwatch_event_rule.test_ecs_scheduled_task_event_rule.name arn = <タスクを実行するECS ClusterのARN> role_arn = <ECS Scheduled Taskを実行するためのRoleのARN> ecs_target { // リビジョン番号なしのARNを指定 task_definition_arn = "arn:aws:ecs:ap-northeast-1:<アカウントID>:task-definition/test-ecs-scheduled-task" task_count = "1" launch_type = "FARGATE" platform_version = "1.4.0" network_configuration { assign_public_ip = false security_groups = [ <タスクに割り当てるSecurity GroupのID> ] subnets = [ <タスクを起動するサブネットのID> ] } } }
このように、ecs_targetのtask_definition_arnにリビジョン番号なしのARNを指定することで、最新のタスク定義を実行することができます。
なお、リビジョン指定して実行したい場合はARNの最後に:リビジョン番号
をつけましょう。
試してみる
いくつかの変数を環境に合わせて修正した後、実際にTerraformテンプレートを実行してECS Scheduled Taskを作成しました。
タスク定義にはリビジョン指定のないARNが登録されています。
この状態で編集ボタンを押すと、常に最新のタスク定義リビジョンを実行するようになっていることが確認できます。
実際に最新のタスク定義を実行するのか、動作を確認してみます。
まず、Batch Scheduled Taskの初回実行を確認します。
タスク定義test-ecs-scheduled-task
のリビジョン1
が実行されています。
ここで、タスク定義test-ecs-scheduled-task
を更新し、リビジョン2
を作成します。
その後、Batch Scheduled Taskの2回目の実行を確認します。
タスク定義test-ecs-scheduled-task
のリビジョン2
が実行されており、常に最新のリビジョン番号が実行されていることが分かります。
以上のように、Terraformでも、常に最新のタスク定義を実行するよう指定ができることが確認できました。
趣味のスパイスカレー
私の趣味はスパイスカレー作りで、ブログに投稿していってます。
相変わらずAWSには全然関係ありませんが、お付き合いいただけますと幸いです。
- チキンドピアザ
玉ねぎがたっぷり入ったチキンカレーです。
インドでは「ド」が2、「ピアザ」が玉ねぎの意味で、ベースの玉ねぎと煮込み用の玉ねぎを2回いれて作るチキンカレーです。
その分手間暇はかかりましたが、玉ねぎの甘味・旨味がしっかりと感じられる、とても美味しいカレーでした!
最後に
Terraformを使って常に最新のタスク定義でECS Scheduled Taskを実行しました。
本ブログによってやり方が分からずハマってしまう人を一人でも無くせたら幸いです。